home *** CD-ROM | disk | FTP | other *** search
-
- ;Making SYMPHONY ver 1.00 to run with out SYMPHONY'S master disk -
- ;unprotecting it:
- ;
- ;A>REN SYMPHONY.CMP SYMPHONY.XXX
- ;A>DEBUG SYMPHONY.XXX
- ;-R ;find the segment where loaded and add 1000 to it
- ; ;DS=0DFA - xxxx=1DFA (0DFAH+1000H=1DFAH)
- ;-E xxxx:3A05 75 ;change INT 13 to INT 75H (see label SYMINT below)
- ;-W ;save changed file
- ;-Q ;exit debuger
- ;A>REN SYMPHONY.XXX SYMPHONY.CMP
- ;A>SYMPH ;execute THIS PROGRAM (it modifies the changed interupt
- ; ;back to 13H since SYMPHONY does checksum of it's self)
- ;
- ;
- ;
- ; assemble, link, exe2bin
- ;
- ;Execute this program before using SYMPHONY.
- ;There is no need to re-execute this program after exit from SYMPHONY, in
- ;order to use the SYMPHONY again, since it is a resident program
- ;
- ;
- ;to further examine the symphony for possibly other way to solve this, using
- ;DEBUG, do:
- ;A>DEBUG SYMPHONY.EXE
- ;-G2
- ;-T3
- ;-G8A40
- ;-T ;at this point you will find the the subroutine that fills
- ; ;location ds:8735 with n and int 13 (the second one) which
- ; ;reads the serial number from flopy disk in A. Zeroing 8735
- ; ;fools the symphony, and prevents it from testing for special
- ; ;track/sector structure on the flopy. If the location 8735 is
- ; ;not zeroed, debugging will not be possible after IP 8A4D,
- ; ;since INT 3 will be modified by SYMPHONY.
- ;
-
- SYMINT EQU 75H ;interupt to use
-
- SYMFLG EQU 8735H ;see above for info
-
- CSEG SEGMENT
- ASSUME CS:CSEG,DS:CSEG
- ORG 100H
- PROGRA: XOR AX,AX
- MOV ES,AX ;set to segment 0 (interupt table)
- XOR DX,DX
- MOV AL,SYMINT ;interupt number
- MOV CX,4 ;get position in interupt table
- MUL CX
- MOV BX,AX
- TEST WORD PTR ES:[BX],0 ;test if set?
- JZ DOIT ;no, go set it
- INT 20H ;exit to dos with out mod
-
- DOIT: ;get interupt routine address
- MOV word ptr ES:[BX],offset corc ;store it at the apropriate int address
- MOV ES:[BX+2],CS ;also store the segment
- MOV DX,5+16 ;lenght of this pgm in segments
- MOV AX,3103H ;exit & stay resident
- INT 21H
-
- ;this is the actual interupt
- CORC: CLI
- PUSH ES ;save all used registers
- PUSH BP
- PUSH BX
- MOV BP,SP
- MOV ES,[BP+8] ;get calling segment from stack
- MOV BX,[BP+6] ;get calling address from stack
- DEC BX ;back up one
- MOV BYTE PTR ES:[BX],13H ;store interupt 13h there
- MOV BYTE PTR DS:SYMFLG,0 ;zero out the flopy test flag
- POP BX ;restore registers
- POP BP
- POP ES
- STI
- IRET ;back to symphony
-
- CSEG ENDS
- END PROGRA